package com.wjerp.tplus.server.domain.service;

import com.wjerp.tplus.server.api.request.AddReimburseMemberInfoRequest;
import com.wjerp.tplus.server.api.request.QueryReimburseMemberListRequest;
import com.wjerp.tplus.server.api.response.PageDataResponse;
import com.wjerp.tplus.server.api.response.ReimburseMemberInfoResponse;
import com.wjerp.tplus.server.common.constant.DataStatus;
import com.wjerp.tplus.server.common.exception.BusinessException;
import com.wjerp.tplus.server.common.exception.ServiceException;
import com.wjerp.tplus.server.domain.entity.invoice.mng.ReimburseMemberInfo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 报销人员操作服务接口
 * @author lishuailei
 */
public interface ReimburseMemberService {

    /**
     * 分页查询报销人员信息
     * @param request 查询参数
     * @return 报销人员信息列表
     */
    PageDataResponse<ReimburseMemberInfoResponse> loadReimburseMember(QueryReimburseMemberListRequest request);

    /**
     * 新增报销人员信息
     * @param request 报销人员信息入参
     * @param currentLoginDisplayUserId 当前登陆用户显示ID
     * @param companyCode 公司编码
     */
    void addReimburseMember(AddReimburseMemberInfoRequest request, String currentLoginDisplayUserId, String companyCode) throws BusinessException;

    /**
     * 更新报销人员状态
     * @param reimburseMemberCode 报销人员编码
     * @param currentLoginDisplayUserId 当前登陆用户显示ID
     * @param companyCode
     * @param dataStatus 数据状态枚举
     */
    void updateReimburseMemberStatus(String reimburseMemberCode, String currentLoginDisplayUserId, String companyCode, DataStatus dataStatus) throws BusinessException;

    /**
     * 根据报销人员编码集合获取报销人员信息列表
     * @param reimburseMemberCodeList 报销人员编码集合
     * @return 报销人员信息列表
     */
    List<ReimburseMemberInfo> loadReimburseMemberByReimburseMemberCodeList(List<String> reimburseMemberCodeList);

    /**
     * 更新报销人员信息
     * @param request 报销人员信息入参
     * @param displayUserId 当前登陆用户显示ID
     * @param companyCode
     */
    void updateReimburseMember(AddReimburseMemberInfoRequest request, String displayUserId, String companyCode) throws BusinessException;

    /**
     * 获取所有可用的报销人员信息列表
     * @return 报销人员信息列表
     */
    List<ReimburseMemberInfo> loadAllReimburseMember();

    /**
     * 导入报销人员
     * @param file excel文件
     * @param companyCode 操作人员企业编码
     * @param displayUserId 操作人员用户显示ID
     */
    void importReimburseByFile(MultipartFile file, String companyCode, String displayUserId) throws ServiceException, BusinessException;
}
